package EX3;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/*
3、猜数字游戏
猜数游戏是现实生活中常玩的一款小游戏，本案例利用Java图形组件开发一个猜数程序，该程序随机在0到100的范围中选择一个供用户猜测的整数。
界面上提供一个文本框来接收用户输入的猜测的数，如果用户猜得太大，则背景变为红色，如果猜得太小，背景变为蓝色。
用户猜对后，文本框变为不可编辑，同时提示用户猜对了。
界面上提供一个按钮，使用户可以重新开始这个游戏。在界面上还可以显示用户猜测的次数。
 */
public class demo8 extends JFrame{
    static int count;//猜数次数
    int rightNum;
    JTextField txtinput;
    JLabel tip;
    JPanel p;
    JLabel result;
    JButton b1,b2,b3;

    public demo8(){
        super("猜数字游戏");
        p=new JPanel();
        JLabel input=new JLabel("请输入您猜测的数字：");
        txtinput=new JTextField(20);
        result=new JLabel();//显示结果
        p.add(input);
        p.add(txtinput);
        p.add(result);

        b1=new JButton("确认");
        b2=new JButton("重新开始");
        b3=new JButton("退出");
        ActionListener l1=new ComfirmLiistener();
        b1.addActionListener(l1);
        ActionListener l2=new OtherListener();
        b2.addActionListener(l1);
        b2.addActionListener(l2);
        b3.addActionListener(l2);
        JPanel buttons=new JPanel();
        buttons.add(b1);
        buttons.add(b2);
        buttons.add(b3);

        tip=new JLabel("您已经猜了"+count+"次");

        add(tip,"North");
        add(p,"Center");
        add(buttons,"South");

        rightNum=(int)(Math.random()*100);

        setBounds(200,100,500,200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    class ComfirmLiistener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            //正确
            if (Integer.parseInt(txtinput.getText())==rightNum){
                //设置文本框不可编辑、猜测次数++、调整背景色
                txtinput.setEditable(false);
                tip.setText("您已经猜了"+(++count)+"次");
                Color defaultColor=getBackground();
                p.setBackground(defaultColor);
                //显示结果
                result.setText("猜对啦");
            }else if(Integer.parseInt(txtinput.getText())<rightNum){
                p.setBackground(Color.blue);
                tip.setText("您已经猜测了"+(++count)+"次");
                result.setText("太小");
            } else {
                p.setBackground(Color.red);
                tip.setText("您已经猜了"+(++count)+"次");
                result.setText("太大");
            }
        }
    }

    class OtherListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            if (e.getSource()==b2){
                //重新开始
                txtinput.setText("");
                txtinput.setEditable(true);
                //重新生成一个随机数
                rightNum=(int)(Math.random()*100);
                Color defaultColor=getBackground();
                p.setBackground(defaultColor);
                count=0;
                tip.setText("您已经猜了"+count+"次");
                result.setText("");
            }else {
                //否则则关闭窗口
                setVisible(false);
            }
        }
    }

    public static void main(String[] args) {
        new demo8();
    }
}
